package com.ybbase.framework.service.system;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ybbase.framework.base.model.TreeModel;
import com.ybbase.framework.model.po.system.OrganUser;
import com.ybbase.framework.model.po.system.Organization;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ybbase.framework.model.po.system.Post;
import com.ybbase.framework.model.po.system.Role;
import com.ybbase.framework.model.vo.organ.OrganTreeVO;

import java.util.List;

/**
 * <p>
 * 系统机构 服务类
 * </p>
 *
 * @author cg
 * @since 2019-11-25
 */
public interface OrganizationService extends IService<Organization> {

    /**
     * 根据用户查询组织机构列表
     * @param userId 用户编码
     * @return List<Organization>
     * @author cg
     * @date 2019-11-26 13:54
     * @since cloud2.0
     */
    List<Organization> getOrgListByUserId(Integer userId);

    /**
     * 根据用户编码获取企业在机构里面的组织机构编码
     * @param userId 用户编码
     * @return Organization
     * @author cg
     * @date 2019-11-28 14:06
     * @since cloud2.0
     */
    Organization getOrganCompanyByUserId(Integer userId);

    /**
     * 获取机构树
     * @param list 机构树
     * @return List<OrganTreeVO>
     * @author jzw
     * @date 2019/12/3 18:42
     * @since cloud2.0
     */
    List<OrganTreeVO>getOrganTree(List<Organization> list);

    /**
     * 保存机构和岗位的关系
     * @param organId 机构编码
     * @param postIds 岗位编码
     * @author jzw
     * @date 2019/12/3 18:43
     * @since cloud2.0
     */
    void saveOrganPost(Integer organId, List<Post> postIds);

    /**
     * 查询指定机构下的岗位列表
     * @param organId 机构编码
     * @return  List<Post> 岗位列表
     * @author jzw
     * @date 2019/12/3 18:47
     * @since cloud2.0
     */

    List<Post> getOrganPostList(Integer organId);

    /**
     * 删除指定机构下的岗位关系
     * @param organId 机构编码
     * @param postIds 岗位编码
     * @author jzw
     * @date 2019/12/3 18:48
     * @since cloud2.0
     */
    void deleteOrganPost(Integer organId, List<Post> postIds);

    /**
     * 根据路径查询下钻数据
     * @param
     * @return
     * @author cg
     * @date 2019-12-05 20:59
     * @since cloud2.0
     */
    List<Organization> getOrgListByPath(String path) throws Exception;

    void saveRole(int organizationId,int roleId);

    Boolean getOrganRoleById(int organizationId);

    Page<Role> getOrganRoleListById(int organizationId, int currPage, int pageSize);

    void removeRoleById(String organizationId,String roleId);

    /**
     * 保存或者更新组织机构信息
     * @param organization 组织机构数据
     * @return
     * @author cg
     * @date 2020-01-06 00:22
     * @since cloud2.0
    */
    void saveOrUpdateOrganization(Organization organization);
    /**
     * 根据组织机构ID获取组织机构用户信息
     * @param id organId
     * @return
     * @author cg
     * @date 2020-01-06 01:24
     * @since cloud2.0
    */
    List<OrganUser> getOrganUserByOrgId(String id);

    /**
     * 根据类型和id集合进行查询
     * @param organIds
     * @return
     * @author cg
     * @date 2020-01-27 23:09
     * @since cloud2.0
    */
    List<Organization> getOrgListQuery(String[] organIds, int type);
}



